Some virtual machine platforms provide a capability of generating a recording of the execution behavior of an instantiated virtual machine for replay at a later time. The recording is generated by taking an initial snapshot of the complete state of the virtual machine at a certain point in time and recording certain subsequent state changes. The complete state of the virtual machine includes its entire memory, which can comprise multiple gigabytes of data, and its entire device state, including associated mass storage, which can comprise hundreds of gigabytes of data.
One usage model for recording and replay is to facilitate debugging. A session comprises a specific instance of execution for a software application. Replaying a recorded session or sessions replicates any errors that arose during the original execution of the application or applications. Recording and replay enables an application end user to provide to the application vendor a recording that includes errors encountered during the application's execution by the end user. The application vendor can, in turn, replay the application to reproduce identical errors to debug the application.
An abstraction level is commonly selected prior to recording a session. When choosing a conventional record-replay solution, a system administrator must choose, prior to execution, how comprehensively to record each session and at what abstraction level to record. Unfortunately, such choices frequently do not match well with how a recording is ultimately used. A recording may contain too little information to support an end use of replay, or the recording may contain confidential information that should not be released, for example, to a third party software vendor. Security and privacy issues relating to potentially confidential data stored in a snapshot limit the usefulness of conventional recordings. Availability of an appropriately selected abstraction level for a given recording further limits overall usefulness of conventional record-replay techniques.